package com.example.demo.mapper;

import com.example.demo.client.evt.sysbasequery.QueryLogInfoEvt;
import com.example.demo.client.evt.sysbasequery.SaveOperateLogEvt;
import com.example.demo.web.rest.evt.PeriodEvt;
import com.example.demo.web.rest.evt.log.LoginLogEvt;
import com.example.demo.web.rest.evt.log.MenuLogEvt;
import com.example.demo.web.rest.evt.log.QryOperateLogEvt;
import com.example.demo.web.rest.evt.log.QueryOperateLogEvt;
import com.example.demo.web.rest.vm.LoginLogVm;
import com.example.demo.web.rest.vm.MenuLogVm;
import com.example.demo.web.rest.vm.OperateDescVm;
import com.example.demo.web.rest.vm.OperateLogVm;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

/**
 * 日志管理(登录日志和操作日志)
 * @Author zhengmf
 * @Date 2018/12/26  15:28
 */
@Mapper
public interface LogMapper {
    /**
     * 删除指定时间段的登录日志
     * @param evt
     * @return
     */
    Integer delLoginLogByPeriod(PeriodEvt evt);
    /**
     * 根据id删除登录日志
     * @param id
     * @return
     */
    Integer delLoginLogById(Long id);

    /**
     * 删除指定时间段的操作日志
     * @param evt
     * @return
     */
    Integer delLogByPeriod(PeriodEvt evt);

    /**
     * 根据Id删除操作日志
     * @param id
     * @return
     */
    void delLogById(Long id);

    /**
     * 定时清除系统日志
     */
    void clearLogBefore30day(String timeLine);


    /**
     * 查询系统日志表
     */
    List<Map<String,Object>> queryLogInfo(QueryLogInfoEvt evt);

    /**
     * 根据区域统计操作用户
     * @return
     */
    List<Map<String,Object>> countOperateUserByArea(QryOperateLogEvt evt);

    /**
     * 根据区域统计登录用户
     * @return
     */
    List<Map<String,Object>> countLoginUserByArea(QryOperateLogEvt evt);
    /**
     * 根据区域统计有效用户
     * @return
     */
    List<Map<String,Object>> countValidUserByArea();

    /**
     * 根据单位统计
     * @return
     */
    List<Map<String, Object>> countCompany();

    /**
     * 根据单位统计有效用户
     * @return
     */
    List<Map<String, Object>> countValidUserByCompany(QryOperateLogEvt evt);
    /**
     * 根据单位统计操作次数
     * @return
     */
    List<Map<String, Object>> countOperateUserByCompany(QryOperateLogEvt evt);
    /**
     * 根据单位统计登录次数
     * @return
     */
    List<Map<String, Object>> countLoginUserByCompany(QryOperateLogEvt evt);
    /**
     * 根据用户统计使用次数
     * @return
     */
    List<Map<String, Object>> countOperateUserByUser(QryOperateLogEvt evt);
    /**
     * 根据用户统计登录次数
     * @return
     */
    List<Map<String, Object>> countLoginUserByUser(QryOperateLogEvt evt);
    /**
     * 根据功能统计操作日志
     * @return
     */
    List<Map<String, Object>> countByFun(QryOperateLogEvt evt);

    /**
     * 根据忙时统计操作日志
     * @return
     */
    List<Map<String, Object>> countOperateUserByBusy(QryOperateLogEvt evt);
    /**
     * 根据忙时统计登录日志
     * @return
     */
    List<Map<String, Object>> countLoginUserByBusy(QryOperateLogEvt evt);

    /**
     * 根据忙时统计登录日志
     * @return
     */
    List<OperateLogVm> listOperateLog(QueryOperateLogEvt evt);

    /**
     * 保存日记
     * @param evt
     * @return
     */
    Boolean saveOperateLog(SaveOperateLogEvt evt);


    /**
     * 查询登录日志
     * @param evt
     * @return
     */
    List<LoginLogVm> listLoginLog(LoginLogEvt evt);

    void saveMenuLog(MenuLogEvt evt);

    List<MenuLogVm> queryMenuLog();

    /**
     * 查询操作标识
     * */
    List<OperateDescVm> getOperateDescList();
}
